home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / lang / PPCsmalltalk.lha / PPCSmallTalk / parser / lex.yy.c < prev    next >
C/C++ Source or Header  |  1986-10-19  |  18KB  |  1,037 lines

  1. /* # include "stdio.h" */
  2. # define U(x) x
  3. # define NLSTATE yyprevious=YYNEWLINE
  4. # define BEGIN yybgin = yysvec + 1 +
  5. # define INITIAL 0
  6. # define YYLERR yysvec
  7. # define YYSTATE (yyestate-yysvec-1)
  8. # define YYOPTIM 1
  9. # define YYLMAX 200
  10. # define output(c) putc(c,yyout)
  11. # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
  12. # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
  13. # define yymore() (yymorfg=1)
  14. # define ECHO fprintf(yyout, "%s",yytext)
  15. # define REJECT { nstr = yyreject(); goto yyfussy;}
  16. int yyleng; extern char yytext[];
  17. int yymorfg;
  18. extern char *yysptr, yysbuf[];
  19. int yytchar;
  20. FILE *yyin = {stdin}, *yyout = {stdout};
  21. extern int yylineno;
  22. struct yysvf { 
  23.     int yystoff;
  24.     struct yysvf *yyother;
  25.     int *yystops;};
  26. struct yysvf *yyestate;
  27. extern struct yysvf yysvec[], *yybgin;
  28. /*
  29.         Little Smalltalk lexical analyzer
  30. */
  31. # include <math.h>
  32.  
  33. # undef input
  34. # undef unput
  35.  
  36. double atof();
  37. int linenum = 1;
  38. # define YYNEWLINE 10
  39. yylex(){
  40. int nstr; extern int yyprevious;
  41. while((nstr = yylook()) >= 0)
  42. yyfussy: switch(nstr){
  43. case 0:
  44. if(yywrap()) return(0); break;
  45. case 1:
  46.                        {;}
  47. break;
  48. case 2:
  49.                              {linenum++;}
  50. break;
  51. case 3:
  52.                              {readcomment();}
  53. break;
  54. case 4:
  55.                            {return(ASSIGN);}
  56. break;
  57. case 5:
  58.                            {return(ASSIGN);}
  59. break;
  60. case 6:
  61.                           {return(lexsave(CLASS));}
  62. break;
  63. case 7:
  64.                            {yylval.p = selfvar;  return(PSEUDO);}
  65. break;
  66. case 8:
  67.         {yylval.p = procvar;  return(PSEUDO);}
  68. break;
  69. case 9:
  70.                           {yylval.p = supervar; return(PSEUDO);}
  71. break;
  72. case 10:
  73.                             {yylval.p = nilvar;   return(PSEUDO);}
  74. break;
  75. case 11:
  76.                            {yylval.p = truevar;  return(PSEUDO);}
  77. break;
  78. case 12:
  79.                           {yylval.p = falsevar; return(PSEUDO);}
  80. break;
  81. case 13:
  82.                       {yylval.p = smallvar; return(PSEUDO);}
  83. break;
  84. case 14:
  85.                             {yylval.i = yytext[1]; return(LITCHAR);}
  86. break;
  87. case 15:
  88.                               {return(PS);}
  89. break;
  90. case 16:
  91. {return(lexsave(LITFNUM));}
  92. break;
  93. case 17:
  94.                          {yylval.i = atoi(yytext); return(LITNUM);}
  95. break;
  96. case 18:
  97.   {return(lexsave(LITFNUM));}
  98. break;
  99. case 19:
  100.                         {char c; unput(c = input());
  101.                                  if (c == '\'') yymore();
  102.                                  else return(lexlstr());}
  103. break;
  104. case 20:
  105.                  {return(varlex());}
  106. break;
  107. case 21:
  108.                   {return(slexsave(COLONVAR));}
  109. break;
  110. case 22:
  111.                 {return(slexsave(LITSYM));}
  112. break;
  113. case 23:
  114.                             {return(lexsave(MINUS));}
  115. break;
  116. case 24:
  117.                             {return(LP);}
  118. break;
  119. case 25:
  120.                             {return(RP);}
  121. break;
  122. case 26:
  123.                             {return(LB);}
  124. break;
  125. case 27:
  126.                             {return(RB);}
  127. break;
  128. case 28:
  129.                             {return(PERIOD);}
  130. break;
  131. case 29:
  132.             {return(lexsave(MBAR));}
  133. break;
  134. case 30:
  135.             {return(lexsave(MBAR));}
  136. break;
  137. case 31:
  138.                             {return(lexsave(BAR));}
  139. break;
  140. case 32:
  141.                             {return(lexsave(BAR));}
  142. break;
  143. case 33:
  144.                             {return(SEMI);}
  145. break;
  146. case 34:
  147.                             {return(lexsave(UPARROW));}
  148. break;
  149. case 35:
  150.             {return(lexsave(PE));}
  151. break;
  152. case 36:
  153.               {return(lexsave(BINARY));}
  154. break;
  155. case 37:
  156.               {return(PRIMITIVE);}
  157. break;
  158. case -1:
  159. break;
  160. default:
  161. fprintf(yyout,"bad switch yylook %d",nstr);
  162. } return(0); }
  163. /* end of yylex */
  164. static int ocbuf = 0;
  165. static int pbbuf[400];
  166.  
  167. static int input()
  168. {    int c;
  169.  
  170.     if (ocbuf) {c = pbbuf[--ocbuf]; }
  171.     else {
  172.         c = getc(fp);
  173.         if (c == EOF) c = 0;
  174.         }
  175.     return(c);
  176. }
  177.  
  178. static unput(c)
  179. char c;
  180. {
  181.     if (c) pbbuf[ocbuf++] = c;
  182. }
  183.  
  184. # include <ctype.h>
  185.  
  186. static readcomment()
  187. {  char c;
  188.  
  189.    while ((c = input()) && c != '\"')
  190.     if (c == '\n') linenum++;
  191.    if (!c) yyerror("unterminated comment");
  192. }
  193.  
  194. char *walloc(s) char *s;
  195. {  char *p, *malloc();
  196.  
  197.    p = malloc((unsigned) (strlen(s) + 1));
  198.    if (p == (char *) 0) yyerror("out of variable string space");
  199.    strcpy(p, s);
  200.    return(p);
  201. }
  202.  
  203. static int slexsave(type)
  204. int type;
  205. {
  206.  
  207.     yylval.c = walloc(&yytext[1]);
  208.     if (yylval.c == 0) yerr("cannot create symbol %s", yytext);
  209.     return(type);
  210. }
  211.  
  212. static int lexsave(type)
  213. int type;
  214. {
  215.  
  216.     yylval.c = walloc(yytext);
  217.     if (yylval.c == 0) yerr("cannot create string %s", yytext);
  218.     return(type);
  219. }
  220.  
  221. static int varlex()
  222. {  
  223.  
  224.    lexsave(0);
  225.    if (yytext[yyleng-1] == ':') return(KEYWORD);
  226.    else if (islower(yytext[0])) return(LOWERCASEVAR);
  227.    else return(UPPERCASEVAR);
  228. }
  229.  
  230. static int lexlstr()
  231. {  char *p, *q;
  232.  
  233.    yylval.c = p = walloc(&yytext[1]);
  234.    *(p + yyleng -2) = '\0';
  235.    return(LITSTR);
  236. }
  237. int yyvstop[] = {
  238. 0,
  239.  
  240. 36,
  241. 0,
  242.  
  243. 1,
  244. 0,
  245.  
  246. 2,
  247. 0,
  248.  
  249. 1,
  250. 36,
  251. 0,
  252.  
  253. 32,
  254. 36,
  255. 0,
  256.  
  257. 3,
  258. 36,
  259. 0,
  260.  
  261. 15,
  262. 36,
  263. 0,
  264.  
  265. 36,
  266. 0,
  267.  
  268. 36,
  269. 0,
  270.  
  271. 24,
  272. 36,
  273. 0,
  274.  
  275. 25,
  276. 36,
  277. 0,
  278.  
  279. 23,
  280. 36,
  281. 0,
  282.  
  283. 28,
  284. 36,
  285. 0,
  286.  
  287. 17,
  288. 18,
  289. 20,
  290. 0,
  291.  
  292. 36,
  293. 0,
  294.  
  295. 33,
  296. 36,
  297. 0,
  298.  
  299. 36,
  300. 0,
  301.  
  302. 35,
  303. 36,
  304. 0,
  305.  
  306. 20,
  307. 0,
  308.  
  309. 20,
  310. 0,
  311.  
  312. 26,
  313. 36,
  314. 0,
  315.  
  316. 27,
  317. 36,
  318. 0,
  319.  
  320. 34,
  321. 36,
  322. 0,
  323.  
  324. 20,
  325. 0,
  326.  
  327. 20,
  328. 0,
  329.  
  330. 20,
  331. 0,
  332.  
  333. 20,
  334. 0,
  335.  
  336. 31,
  337. 36,
  338. 0,
  339.  
  340. 30,
  341. 32,
  342. 36,
  343. 0,
  344.  
  345. 29,
  346. 31,
  347. 36,
  348. 0,
  349.  
  350. 22,
  351. 0,
  352.  
  353. 14,
  354. 0,
  355.  
  356. 19,
  357. 0,
  358.  
  359. 20,
  360. 0,
  361.  
  362. 20,
  363. 0,
  364.  
  365. 20,
  366. 0,
  367.  
  368. 21,
  369. 0,
  370.  
  371. 4,
  372. 0,
  373.  
  374. 5,
  375. 0,
  376.  
  377. 20,
  378. 0,
  379.  
  380. 20,
  381. 0,
  382.  
  383. 20,
  384. 0,
  385.  
  386. 20,
  387. 0,
  388.  
  389. 20,
  390. 0,
  391.  
  392. 20,
  393. 0,
  394.  
  395. 20,
  396. 0,
  397.  
  398. 18,
  399. 0,
  400.  
  401. 18,
  402. 20,
  403. 0,
  404.  
  405. 16,
  406. 20,
  407. 0,
  408.  
  409. 20,
  410. 0,
  411.  
  412. 20,
  413. 0,
  414.  
  415. 10,
  416. 20,
  417. 0,
  418.  
  419. 20,
  420. 0,
  421.  
  422. 20,
  423. 0,
  424.  
  425. 20,
  426. 0,
  427.  
  428. 20,
  429. 0,
  430.  
  431. 18,
  432. 0,
  433.  
  434. 16,
  435. 0,
  436.  
  437. 20,
  438. 0,
  439.  
  440. 20,
  441. 0,
  442.  
  443. 20,
  444. 0,
  445.  
  446. 7,
  447. 20,
  448. 0,
  449.  
  450. 20,
  451. 0,
  452.  
  453. 20,
  454. 0,
  455.  
  456. 11,
  457. 20,
  458. 0,
  459.  
  460. 16,
  461. 0,
  462.  
  463. 16,
  464. 20,
  465. 0,
  466.  
  467. 6,
  468. 20,
  469. 0,
  470.  
  471. 12,
  472. 20,
  473. 0,
  474.  
  475. 20,
  476. 0,
  477.  
  478. 20,
  479. 0,
  480.  
  481. 9,
  482. 20,
  483. 0,
  484.  
  485. 16,
  486. 0,
  487.  
  488. 20,
  489. 0,
  490.  
  491. 20,
  492. 0,
  493.  
  494. 20,
  495. 0,
  496.  
  497. 20,
  498. 0,
  499.  
  500. 20,
  501. 0,
  502.  
  503. 20,
  504. 0,
  505.  
  506. 20,
  507. 0,
  508.  
  509. 13,
  510. 20,
  511. 0,
  512.  
  513. 37,
  514. 0,
  515.  
  516. 20,
  517. 0,
  518.  
  519. 8,
  520. 20,
  521. 0,
  522. 0};
  523. # define YYTYPE char
  524. struct yywork { YYTYPE verify, advance; } yycrank[] = {
  525. 0,0,    0,0,    1,3,    0,0,    
  526. 0,0,    0,0,    0,0,    0,0,    
  527. 0,0,    0,0,    1,4,    1,5,    
  528. 0,0,    0,0,    1,6,    4,4,    
  529. 0,0,    0,0,    0,0,    4,4,    
  530. 0,0,    0,0,    0,0,    0,0,    
  531. 0,0,    0,0,    0,0,    0,0,    
  532. 0,0,    0,0,    0,0,    0,0,    
  533. 0,0,    0,0,    1,7,    1,8,    
  534. 1,9,    1,10,    4,4,    0,0,    
  535. 1,11,    1,12,    1,13,    0,0,    
  536. 1,3,    0,0,    1,14,    1,15,    
  537. 19,43,    1,16,    0,0,    0,0,    
  538. 0,0,    0,0,    0,0,    0,0,    
  539. 0,0,    0,0,    0,0,    1,17,    
  540. 1,18,    1,19,    0,0,    1,20,    
  541. 0,0,    0,0,    1,21,    0,0,    
  542. 1,22,    0,0,    0,0,    65,53,    
  543. 0,0,    65,53,    0,0,    2,31,    
  544. 2,8,    2,9,    2,10,    0,0,    
  545. 0,0,    9,33,    0,0,    2,13,    
  546. 0,0,    0,0,    0,0,    2,14,    
  547. 2,15,    9,0,    9,0,    0,0,    
  548. 1,23,    9,33,    1,24,    1,25,    
  549. 0,0,    0,0,    1,21,    26,46,    
  550. 2,17,    2,18,    2,19,    1,26,    
  551. 2,20,    45,58,    0,0,    27,47,    
  552. 49,62,    2,22,    22,45,    1,27,    
  553. 9,0,    46,59,    47,60,    19,44,    
  554. 1,28,    1,29,    29,51,    9,33,    
  555. 9,0,    9,0,    10,34,    9,33,    
  556. 28,48,    1,30,    9,0,    44,57,    
  557. 9,33,    48,61,    10,34,    10,0,    
  558. 28,49,    2,23,    10,34,    2,24,    
  559. 2,25,    50,63,    51,64,    52,65,    
  560. 28,50,    11,35,    57,70,    58,71,    
  561. 2,26,    9,33,    59,72,    61,73,    
  562. 62,74,    11,35,    11,35,    63,75,    
  563. 2,27,    11,35,    64,76,    70,81,    
  564. 71,82,    2,28,    2,29,    72,83,    
  565. 10,34,    10,34,    67,68,    73,84,    
  566. 10,34,    74,85,    2,32,    75,86,    
  567. 78,77,    10,34,    81,88,    9,0,    
  568. 84,89,    85,90,    88,91,    89,92,    
  569. 90,93,    9,33,    91,94,    11,36,    
  570. 11,35,    92,95,    93,96,    11,35,    
  571. 94,97,    95,98,    10,34,    96,99,    
  572. 11,35,    37,52,    37,52,    37,52,    
  573. 37,52,    37,52,    37,52,    37,52,    
  574. 37,52,    37,52,    37,52,    97,100,    
  575. 98,101,    39,53,    101,102,    39,53,    
  576. 0,0,    11,35,    39,54,    39,54,    
  577. 39,54,    39,54,    39,54,    39,54,    
  578. 39,54,    39,54,    39,54,    39,54,    
  579. 0,0,    67,77,    10,34,    16,37,    
  580. 0,0,    16,16,    16,16,    16,16,    
  581. 16,16,    16,16,    16,16,    16,16,    
  582. 16,16,    16,16,    16,16,    16,38,    
  583. 0,0,    0,0,    0,0,    0,0,    
  584. 0,0,    11,35,    16,21,    16,21,    
  585. 16,21,    16,21,    16,21,    16,21,    
  586. 16,21,    16,21,    16,21,    16,21,    
  587. 16,21,    16,21,    16,21,    16,21,    
  588. 16,21,    16,21,    16,21,    16,21,    
  589. 16,21,    16,21,    16,21,    16,21,    
  590. 16,21,    16,21,    16,21,    16,21,    
  591. 0,0,    0,0,    0,0,    0,0,    
  592. 0,0,    0,0,    16,21,    16,21,    
  593. 16,21,    16,21,    16,39,    16,21,    
  594. 16,21,    16,21,    16,21,    16,21,    
  595. 16,21,    16,21,    16,21,    16,21,    
  596. 16,21,    16,21,    16,21,    16,40,    
  597. 16,21,    16,21,    16,21,    16,21,    
  598. 16,21,    16,21,    16,21,    16,21,    
  599. 17,41,    17,41,    17,41,    17,41,    
  600. 17,41,    17,41,    17,41,    17,41,    
  601. 17,41,    17,41,    0,0,    0,0,    
  602. 0,0,    17,42,    0,0,    0,0,    
  603. 0,0,    17,41,    17,41,    17,41,    
  604. 17,41,    17,41,    17,41,    17,41,    
  605. 17,41,    17,41,    17,41,    17,41,    
  606. 17,41,    17,41,    17,41,    17,41,    
  607. 17,41,    17,41,    17,41,    17,41,    
  608. 17,41,    17,41,    17,41,    17,41,    
  609. 17,41,    17,41,    17,41,    0,0,    
  610. 0,0,    0,0,    0,0,    0,0,    
  611. 0,0,    17,41,    17,41,    17,41,    
  612. 17,41,    17,41,    17,41,    17,41,    
  613. 17,41,    17,41,    17,41,    17,41,    
  614. 17,41,    17,41,    17,41,    17,41,    
  615. 17,41,    17,41,    17,41,    17,41,    
  616. 17,41,    17,41,    17,41,    17,41,    
  617. 17,41,    17